home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / src / lib / other / putenv.c < prev    next >
C/C++ Source or Header  |  1990-07-19  |  854b  |  44 lines

  1. #include <lib.h>
  2. /*  putenv(3)
  3.  *
  4.  *  Author: Ronald Lamprecht          Sep. 1989
  5.  */
  6.  
  7. #include <stdlib.h>
  8.  
  9. extern char **environ;
  10.  
  11. int putenv(name)
  12. register char *name;
  13. {
  14.   char **v, **nv, **newenv;
  15.   register char *n;
  16.   register char *p;
  17.   register int i = 0;
  18.  
  19.   if (name == (char *)NULL) return(1);
  20.   if (environ != (char **) NULL) {
  21.     for (v = environ; *v != (char *)NULL; v++, i++) {
  22.         n = name;
  23.         p = *v;
  24.  
  25.         while (*n == *p && *n != '=' && *n != '\0') ++n, ++p;
  26.  
  27.         if (*n == '=' && *p == '=') {
  28.             *v = name;
  29.             return(1);
  30.         }
  31.     }
  32.   }
  33.  
  34.   /* Realloc environment ptr. array (original array may not be
  35.    * mallocated !) */
  36.   if ((newenv = (char **) malloc((i + 2) * sizeof(char *))) == (char **) 0)
  37.     return(0);
  38.   for (v = environ, nv = newenv; i > 0; i--, v++, nv++) *nv = *v;
  39.   *(nv++) = name;
  40.   *nv = (char *)NULL;
  41.   environ = newenv;
  42.   return(1);
  43. }
  44.